﻿Public Class PmsManager
    Inherits CoreClass

    Dim GroupID As Integer = 0
    ' Gan gia tri cho bien MenuID de kiem tra quyen cua ng dung, gia tri nay lay trog DB va dc fix
    Dim chkMenu As Integer = getIDMenu(1)

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Try
            chkPms((CInt(Session("GroupId").ToString())), chkMenu)
            If chkView = 1 Then
                If IsNumeric(Request.QueryString("group")) Then
                    GroupID = CLng(Request.QueryString("group"))
                    BindGridPms()
                    If Not Page.IsPostBack Then
                        BindGridUser()
                        'BindGridPms()
                    End If
                Else
                    Response.Redirect("/Inside/System/Group/GroupManager.aspx")
                End If
            Else
                objAlert.ErrorBox(Page, "Bạn không có quyền sử dụng tính năng này. <br><br>Liên hệ với Admin để biết thêm chi tiết.")
            End If
        Catch ex As Exception
            Response.Redirect("/Inside/xLogin.aspx?redirect=" & Request.Url.PathAndQuery.Replace("?", "|"))
        End Try


    End Sub


#Region "Các hàm tự viết"

    ' Format lại vị trí CSS của menu trên bảng
    Public Function formatName(ByVal code As String, ByVal name As String) As String
        If code.Length = 2 Then
            Return "<div class=""navhead"" style=""width:200px;"">" & name & "</div>"
        Else
            Return "<div class=""subPageFunction"" style=""width:180px;"">" & name & "</div>"
        End If
    End Function

    ' Ham convert boolean sang image
    Public Function formatImg(ByVal type As String, ByVal code As String, ByVal stt As String) As String
        Dim img As String = ""
        If Len(code) = 4 Then
            If stt = "1" Then
                img = "<span><input runat=""server"" class=""inputChk"" type=""checkbox"" checked=""checked"" id=""" & type & """ /> <labelChk></labelChk></span>"
            Else
                img = "<span><input runat=""server"" class=""inputChk"" type=""checkbox"" id=""" & type & """ /> <labelChk></labelChk></span>"
            End If
        End If
        Return img
    End Function

    Public fo
#End Region


#Region "Các sự kiện của grid và Button"

    ' Fill data danh sách User đc phân quyền vào bảng
    Private Sub BindGridUser()
        sql = "spi_UserGetByGroup " & GroupID
        Try
            dsSourceUser.ConnectionString = ConnectionString
            dsSourceUser.SelectCommand = sql
            gridUser.DataBind()
        Catch ex As Exception

        End Try

    End Sub

    ' Fill data Permission vào bảng
    Private Sub BindGridPms()
        sql = "spi_PmsMenu " & GroupID
        Try
            dsSourcePms.ConnectionString = ConnectionString
            dsSourcePms.SelectCommand = sql
            gridPms.DataBind()
        Catch ex As Exception

        End Try
    End Sub

    ' Load lai Data khi chuyen trang cho grid User
    Private Sub gridUser_PageIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles gridUser.PageIndexChanged
        BindGridUser()
    End Sub

    ' Tạo màu cho menu cha đậm và menu con nhạt sau khi dũ liệu đã fill vào bảng
    Private Sub gridPms_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gridPms.RowDataBound
        ' Ẩn check box tại dòng đầu tiên, vì code o duoi không can thiệp vào dòng đầu tiên được
        If e.Row.RowIndex = 0 Then
            e.Row.FindControl("chkView").Visible = False
            e.Row.FindControl("chkUpdate").Visible = False
            e.Row.FindControl("chkDelete").Visible = False
            'e.Row.FindControl("chkStt").Visible = False
        End If

        ' Với mỗi dòng tiếp theo thì ẩn Check box tại menu Cha
        For Each row In gridPms.Rows
            Dim lblMenuCodeTemp As Label = CType(e.Row.FindControl("lbCode"), Label)
            If Len(lblMenuCodeTemp.Text) = 2 Then
                e.Row.CssClass = "normalNotHover"
                e.Row.FindControl("chkView").Visible = False
                e.Row.FindControl("chkUpdate").Visible = False
                e.Row.FindControl("chkDelete").Visible = False
                'e.Row.FindControl("chkStt").Visible = False
            Else
                e.Row.CssClass = "altNotHover"
            End If
        Next

        'Add CSS class on normal row.
        If e.Row.RowType = DataControlRowType.DataRow And e.Row.RowState = DataControlRowState.Normal Then
            e.Row.CssClass = "normal"
        End If
        'Add CSS class on alternate row.
        If e.Row.RowType = DataControlRowType.DataRow And e.Row.RowState = DataControlRowState.Alternate Then
            e.Row.CssClass = "alt"
        End If
    End Sub

    ' Tạo các dòng khác màu cho Grid User khi data đc fill vào bảng
    Private Sub gridUser_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gridUser.RowCreated
        'Add CSS class on normal row.
        If e.Row.RowType = DataControlRowType.DataRow And e.Row.RowState = DataControlRowState.Normal Then
            e.Row.CssClass = "normal hand"
        End If
        'Add CSS class on alternate row.
        If e.Row.RowType = DataControlRowType.DataRow And e.Row.RowState = DataControlRowState.Alternate Then
            e.Row.CssClass = "alt hand"
        End If
        ' Thêm sự kiên click row để chỉnh sửa thông tin User
        If e.Row.RowType = DataControlRowType.DataRow Then
            Dim datakey As String = gridUser.DataKeys(e.Row.RowIndex).Value.ToString()     'get the datakey
            e.Row.Attributes.Add("onclick", "window.location='/Inside/System/User/UserUpdate.aspx?id=" & datakey & "'")
        End If
    End Sub

    ' Update phân quyền
    Private Sub btnUpdate_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnUpdate.Click
        If chkUpdate = 1 Then
            Dim row As GridViewRow
            Try
                For Each row In gridPms.Rows
                    Dim chkView As HtmlInputCheckBox
                    Dim chkUpdate As HtmlInputCheckBox
                    Dim chkDelete As HtmlInputCheckBox
                    Dim chkStt As HtmlInputCheckBox
                    Dim lblId As Label = CType(row.FindControl("lbID"), Label)

                    chkView = CType(row.FindControl("chkView"), HtmlInputCheckBox)
                    chkUpdate = CType(row.FindControl("chkUpdate"), HtmlInputCheckBox)
                    chkDelete = CType(row.FindControl("chkDelete"), HtmlInputCheckBox)
                    chkStt = CType(row.FindControl("chkStt"), HtmlInputCheckBox)

                    sql = "spi_PmsUpdate " _
                           & objFunction.ValueCheck(GroupID) & "," _
                           & objFunction.ValueCheck(lblId.Text) & "," _
                           & objFunction.ValueCheck(objFunction.BoolToInt(chkView.Checked)) & "," _
                           & objFunction.ValueCheck(objFunction.BoolToInt(chkUpdate.Checked)) & "," _
                           & objFunction.ValueCheck(objFunction.BoolToInt(chkDelete.Checked)) & "," _
                           & objFunction.ValueCheck(objFunction.BoolToInt(chkStt.Checked))
                    objData.ExeNonQuery(sql)
                    'MsgBox(lblId.Text & "<<<<< View: " & chkView.Checked.ToString & "---- Update: " & chkUpdate.Checked.ToString & "---- Delete: " & chkDelete.Checked.ToString)
                Next
                objAlert.InfoBox(Page, "Update phân quyền nhóm người dùng thành công", Request.Url.PathAndQuery)
                objFunction.writeLog(Session("UserId"), 2, "Update phân quyền nhóm người dùng", GroupID.ToString)
            Catch ex As Exception
                If objConfig.Developer.Equals("1") Then
                    objAlert.ErrorBox(Page, "File: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.DeclaringType.Name & _
                                  " --- Function: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.Name & _
                                  " --- Mess: " & ex.Message.Replace("'", """"))
                Else
                    objAlert.ErrorBox(Page, "Lỗi kỹ thuật, hãy thông báo lại với Admin, xin cảm ơn.")
                End If
            End Try
        Else
            objAlert.ErrorBox(Page, "Bạn không có quyền sử dụng tính năng này, liên hệ với Admin để biết thêm chi tiết.")
        End If
    End Sub

    ' Back trở lại trang Group Manager
    Private Sub btnBack_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnBack.Click
        Response.Redirect("/Inside/System/Group/GroupManager.aspx")
    End Sub

#End Region

End Class